Case Studies

**Referenced Files in This Document** - [cases.njk](file://src/cases.njk) - [case-study-card.njk](file://src/_includes/macros/case-study-card.njk) - [cases.11tydata.json](file://src/content/cases/cases.11tydata.json) - [adelaide-city-fc.md](file://src/content/cases/adelaide-city-fc.md) - [agpn.md](file://src/content/cases/agpn.md) - [aspen-medical.md](file://src/content/cases/aspen-medical.md) - [blacktree.md](file://src/content/cases/blacktree.md) - [flinders-ranges.md](file://src/content/cases/flinders-ranges.md) - [capabilities.json](file://src/_data/capabilities.json) - [capabilitiesPage.json](file://src/_data/capabilitiesPage.json) - [config.yml](file://src/admin/config.yml) - [config.ts](file://tina/config.ts) - [team.11tydata.json](file://src/content/team/team.11tydata.json) - [01-matt-neagle.md](file://src/content/team/01-matt-neagle.md)

Table of Contents

  1. Introduction
  2. Project Structure
  3. Core Components
  4. Architecture Overview
  5. Detailed Component Analysis
  6. Dependency Analysis
  7. Performance Considerations
  8. Troubleshooting Guide
  9. Conclusion
  10. Appendices

Introduction

This document explains the Case Studies content collection, including the frontmatter schema, rendering pipeline, and editorial workflow. It also describes how case studies integrate with the capabilities page and team profiles, and offers guidance on structuring successful case studies with quantifiable results and client quotes.

Project Structure

Case studies live under the content directory and are processed by the static site generator. The cases listing page aggregates all case study documents and renders them via a reusable macro. The Eleventy data file controls per-case routing behavior. The CMS configurations define the editable fields for editors.

graph TB
subgraph "Content"
C1["src/content/cases/*.md"]
C2["src/content/cases/cases.11tydata.json"]
end
subgraph "Rendering"
P1["src/cases.njk"]
M1["src/_includes/macros/case-study-card.njk"]
end
subgraph "CMS"
A1["src/admin/config.yml"]
T1["tina/config.ts"]
end
subgraph "Capabilities"
D1["src/_data/capabilities.json"]
D2["src/_data/capabilitiesPage.json"]
end
subgraph "Team"
T2["src/content/team/team.11tydata.json"]
T3["src/content/team/01-matt-neagle.md"]
end
C1 --> P1
C2 --> P1
P1 --> M1
A1 --> C1
T1 --> C1
D1 --> P1
D2 --> P1
T2 --> P1
T3 --> P1

Diagram sources

  • [cases.njk:1-39](file://src/cases.njk#L1-L39)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)
  • [cases.11tydata.json:1-2](file://src/content/cases/cases.11tydata.json#L1-L2)
  • [capabilities.json:1-53](file://src/_data/capabilities.json#L1-L53)
  • [capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)
  • [config.yml:33-58](file://src/admin/config.yml#L33-L58)
  • [config.ts:44-77](file://tina/config.ts#L44-L77)
  • [team.11tydata.json:1-2](file://src/content/team/team.11tydata.json#L1-L2)
  • [01-matt-neagle.md:1-21](file://src/content/team/01-matt-neagle.md#L1-L21)

Section sources

  • [cases.njk:1-39](file://src/cases.njk#L1-L39)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)
  • [cases.11tydata.json:1-2](file://src/content/cases/cases.11tydata.json#L1-L2)
  • [capabilities.json:1-53](file://src/_data/capabilities.json#L1-L53)
  • [capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)
  • [config.yml:33-58](file://src/admin/config.yml#L33-L58)
  • [config.ts:44-77](file://tina/config.ts#L44-L77)
  • [team.11tydata.json:1-2](file://src/content/team/team.11tydata.json#L1-L2)
  • [01-matt-neagle.md:1-21](file://src/content/team/01-matt-neagle.md#L1-L21)

Core Components

  • Content model: Markdown files with frontmatter define each case study’s metadata and body copy.
  • Rendering: The cases listing page loops over the Eleventy collection and renders cards via a macro.
  • CMS: Two authoring systems define editable fields for case studies:
    • Netlify CMS: fields include client, category, title, image, alt text, quote, author, ordering, featured flag, draft toggle, and body.
    • TinaCMS: similar fields with a rich-text body and explicit categories.
  • Data integration: The capabilities data and page JSON inform how services are presented and how case studies map to service expertise.

Key frontmatter fields observed in practice:

  • client: string
  • category: string (from a predefined list)
  • title: string
  • image: string (image path)
  • image_alt: string
  • quote: string (optional client quote)
  • quote_author: string (optional)
  • order: number (optional)
  • featured: boolean (optional)
  • draft: boolean (optional)
  • body: markdown (in CMS; content body in Markdown files)

Representative examples:

  • [adelaide-city-fc.md:1-14](file://src/content/cases/adelaide-city-fc.md#L1-L14)
  • [agpn.md:1-13](file://src/content/cases/agpn.md#L1-L13)
  • [aspen-medical.md:1-14](file://src/content/cases/aspen-medical.md#L1-L14)
  • [blacktree.md:1-14](file://src/content/cases/blacktree.md#L1-L14)
  • [flinders-ranges.md:1-13](file://src/content/cases/flinders-ranges.md#L1-L13)

Section sources

  • [adelaide-city-fc.md:1-14](file://src/content/cases/adelaide-city-fc.md#L1-L14)
  • [agpn.md:1-13](file://src/content/cases/agpn.md#L1-L13)
  • [aspen-medical.md:1-14](file://src/content/cases/aspen-medical.md#L1-L14)
  • [blacktree.md:1-14](file://src/content/cases/blacktree.md#L1-L14)
  • [flinders-ranges.md:1-13](file://src/content/cases/flinders-ranges.md#L1-L13)
  • [config.yml:33-58](file://src/admin/config.yml#L33-L58)
  • [config.ts:44-77](file://tina/config.ts#L44-L77)

Architecture Overview

The cases listing page pulls all case study documents from the Eleventy collection and renders them as cards. Each card reads frontmatter fields and optional quote fields, and displays the content body safely.

sequenceDiagram
participant U as "Visitor"
participant P as "cases.njk"
participant E as "Eleventy Collection"
participant M as "case-study-card.njk"
participant D as "Markdown Case Study"
U->>P : "Load /cases/"
P->>E : "collections.cases"
loop "For each case"
E-->>P : "item"
P->>M : "card(item)"
M->>D : "Read item.data.*"
M-->>P : "Rendered HTML"
end
P-->>U : "HTML with grid of case cards"

Diagram sources

  • [cases.njk:30-36](file://src/cases.njk#L30-L36)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)

Section sources

  • [cases.njk:1-39](file://src/cases.njk#L1-L39)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)

Detailed Component Analysis

Frontmatter and Content Model

  • Fields: client, category, title, image, image_alt, quote, quote_author, order, featured, draft, body.
  • Categories: Public Affairs & Government Engagement, Strategic Communications, Stakeholder Engagement, New Market Entry, Media Issues Management.
  • Ordering and feature flags: order and featured allow editorial control over prominence and placement.
  • Body content: Markdown body rendered safely in the card macro.

Examples:

  • [adelaide-city-fc.md:1-14](file://src/content/cases/adelaide-city-fc.md#L1-L14)
  • [agpn.md:1-13](file://src/content/cases/agpn.md#L1-L13)
  • [aspen-medical.md:1-14](file://src/content/cases/aspen-medical.md#L1-L14)
  • [blacktree.md:1-14](file://src/content/cases/blacktree.md#L1-L14)
  • [flinders-ranges.md:1-13](file://src/content/cases/flinders-ranges.md#L1-L13)

Section sources

  • [adelaide-city-fc.md:1-14](file://src/content/cases/adelaide-city-fc.md#L1-L14)
  • [agpn.md:1-13](file://src/content/cases/agpn.md#L1-L13)
  • [aspen-medical.md:1-14](file://src/content/cases/aspen-medical.md#L1-L14)
  • [blacktree.md:1-14](file://src/content/cases/blacktree.md#L1-L14)
  • [flinders-ranges.md:1-13](file://src/content/cases/flinders-ranges.md#L1-L13)
  • [config.yml:33-58](file://src/admin/config.yml#L33-L58)
  • [config.ts:44-77](file://tina/config.ts#L44-L77)

Rendering Pipeline

  • cases.njk builds the listing page and injects breadcrumb structured data.
  • The macro reads item.data fields and conditionally renders a quote block if present.
  • The content body is marked safe to preserve formatting.
flowchart TD
Start(["cases.njk"]) --> BuildHero["Build hero and breadcrumbs"]
BuildHero --> Loop["Loop over collections.cases"]
Loop --> MacroCall["call case-study-card.card(item)"]
MacroCall --> ReadFields["Read item.data.*"]
ReadFields --> HasQuote{"Has quote?"}
HasQuote --> |Yes| RenderQuote["Render quote and author"]
HasQuote --> |No| SkipQuote["Skip quote block"]
RenderQuote --> SafeBody["Render content safely"]
SkipQuote --> SafeBody
SafeBody --> End(["Append to grid"])

Diagram sources

  • [cases.njk:11-39](file://src/cases.njk#L11-L39)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)

Section sources

  • [cases.njk:1-39](file://src/cases.njk#L1-L39)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)

Integration with Capabilities

  • The capabilities data and page JSON describe service areas and process steps. Case studies map to these services via the category taxonomy.
  • The capabilities page presents service blocks and a process overview, reinforcing how case studies demonstrate capability delivery.
graph LR
CS["Case Study (category)"] --> MAP["Maps to Capability Area"]
CAP["capabilities.json"] --> MAP
CAP2["capabilitiesPage.json"] --> MAP
MAP --> OUT["Showcase Expertise"]

Diagram sources

  • [capabilities.json:1-53](file://src/_data/capabilities.json#L1-L53)
  • [capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)

Section sources

  • [capabilities.json:1-53](file://src/_data/capabilities.json#L1-L53)
  • [capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)

Team Profiles and Case Study Attribution

  • Team members are defined as Markdown documents with frontmatter and bio content.
  • While the case study frontmatter does not currently include a direct team attribution field, team profiles can be linked from case study pages or service detail pages to show who delivered the work.
  • The team listing page and individual profiles are managed separately and can be referenced from case study detail pages if desired.
graph TB
TM["Team Member (frontmatter)"] --> BIO["Bio and Role"]
CASE["Case Study (frontmatter)"] --> LINK["Optional Link to Team Profile"]
LINK --> BIO

Diagram sources

  • [team.11tydata.json:1-2](file://src/content/team/team.11tydata.json#L1-L2)
  • [01-matt-neagle.md:1-21](file://src/content/team/01-matt-neagle.md#L1-L21)

Section sources

  • [team.11tydata.json:1-2](file://src/content/team/team.11tydata.json#L1-L2)
  • [01-matt-neagle.md:1-21](file://src/content/team/01-matt-neagle.md#L1-L21)

Dependency Analysis

  • cases.njk depends on:
    • Eleventy collections.cases
    • case-study-card macro
    • pages.cases data for hero text and CTA
  • case-study-card depends on item.data.* fields
  • CMS configs define the authoritative frontmatter schema for editors
  • capabilities data informs service taxonomy used in case study categories
graph TB
P["cases.njk"] --> COL["collections.cases"]
P --> MAC["case-study-card.njk"]
P --> DAT["pages.cases.*"]
MAC --> F["item.data.*"]
CMS1["admin/config.yml"] --> F
CMS2["tina/config.ts"] --> F
CAP["capabilitiesPage.json"] --> CAT["category taxonomy"]
CAT --> F

Diagram sources

  • [cases.njk:1-39](file://src/cases.njk#L1-L39)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)
  • [config.yml:33-58](file://src/admin/config.yml#L33-L58)
  • [config.ts:44-77](file://tina/config.ts#L44-L77)
  • [capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)

Section sources

  • [cases.njk:1-39](file://src/cases.njk#L1-L39)
  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)
  • [config.yml:33-58](file://src/admin/config.yml#L33-L58)
  • [config.ts:44-77](file://tina/config.ts#L44-L77)
  • [capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)

Performance Considerations

  • Lazy-loading images in the card macro reduces initial page weight.
  • Using a single macro centralizes rendering logic and minimizes duplication.
  • Keeping frontmatter minimal avoids unnecessary parsing overhead.
  • The listing page loops over the Eleventy collection; avoid heavy computations inside the loop.

[No sources needed since this section provides general guidance]

Troubleshooting Guide

  • Missing or empty fields:
    • If a quote is missing, the quote block is skipped automatically.
    • If image or alt text is missing, the card still renders with fallbacks.
  • Routing:
    • The cases data file disables permalinks for the cases directory, ensuring only the listing page is generated.
  • CMS sync:
    • Confirm that the Netlify CMS and TinaCMS fields match the frontmatter schema used by the templates.

Section sources

  • [case-study-card.njk:1-20](file://src/_includes/macros/case-study-card.njk#L1-L20)
  • [cases.11tydata.json:1-2](file://src/content/cases/cases.11tydata.json#L1-L2)
  • [config.yml:33-58](file://src/admin/config.yml#L33-L58)
  • [config.ts:44-77](file://tina/config.ts#L44-L77)

Conclusion

Case studies are authored with a clear frontmatter schema and rendered consistently via a reusable macro. They integrate with the capabilities taxonomy to showcase service expertise and can be linked to team profiles to highlight who delivered the work. The CMS configurations provide a robust editing experience for content creators.

[No sources needed since this section summarizes without analyzing specific files]

Appendices

Practical Examples and Best Practices

  • Structuring successful case studies:
    • Use a clear client, category, and title.
    • Include a compelling quote with attribution when available.
    • Keep the body concise and outcome-focused.
    • Representative examples:
      • [adelaide-city-fc.md:1-14](file://src/content/cases/adelaide-city-fc.md#L1-L14)
      • [agpn.md:1-13](file://src/content/cases/agpn.md#L1-L13)
      • [aspen-medical.md:1-14](file://src/content/cases/aspen-medical.md#L1-L14)
      • [blacktree.md:1-14](file://src/content/cases/blacktree.md#L1-L14)
      • [flinders-ranges.md:1-13](file://src/content/cases/flinders-ranges.md#L1-L13)
  • Storytelling best practices:
    • Lead with the client and category to orient readers quickly.
    • Frame the challenge, actions taken, and outcomes clearly.
    • Include a client quote to add authenticity and human perspective.
  • Selection criteria:
    • Prefer cases with measurable outcomes and visible impact.
    • Choose examples that align with capability areas to reinforce service expertise.
    • Consider diversity of industries and project types to reflect breadth of experience.

[No sources needed since this section provides general guidance]